exports.plugin = {
  name: 'itemsModel',
  register: (server) => {
    const { mongoose } = server;
    const schema = mongoose.Schema({
      itemname: String,
      pid: {
        type: String,
        default: 0,
      },
      ctime: {
        type: Date,
        default: Date.now,
      },
    });

    schema.methods = {
      // 排序（交换两个同级节点的位置）
      async itemSort({ firstId, secondId }) {
        const { ctime: firstCtime } = await this.model('items').findById(firstId);
        const { ctime: secondCtime } = await this.model('items').findOneAndUpdate({ _id: secondId }, { ctime: firstCtime });
        await this.model('items').findOneAndUpdate({ _id: firstId }, { ctime: secondCtime });
      },
      // 获取节点
      getItems() {
        const result = this.model('items').find({}, { __v: 0 }).sort({ ctime: -1 });
        return result;
      },
      // 添加节点
      addItems(data) {
        return this.model('items').create(data);
      },
      // 根据ID获取单个节点信息
      getItemById(_id) {
        return this.model('items').findById(_id, { __v: 0 });
      },
      // 获取字节点
      getChildrenNodes(pid) {
        return this.model('items').find({ pid }, { __v: 0 });
      },
      // 根据ID删除节点
      deleteItemById(_id) {
        return this.model('items').deleteOne({ _id });
      },
      // 根据ID更新节点信息
      updateItemById(_id, data) {
        return this.model('items').updateOne({ _id }, data);
      },
      // 判断字段值是否存在
      isExist(field, value) {
        return this.model('items').findOne({ [field]: value });
      },
    };
    const Items = mongoose.model('items', schema);
    server.decorate('request', 'itemsModel', new Items());
  },
};
